package br.ucb.indica.DAO;

import java.security.NoSuchAlgorithmException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import br.ucb.indica.negocio.ProjetoBean;
import br.ucb.indica.DAO.ConnectionFactory;
import br.ucb.indica.DAO.PessoaDAO;

public class ProjetoDAO {
	private Connection con;
	
	public ProjetoDAO() throws SQLException {
		this.con = ConnectionFactory.getConnection();
	}
	 
	public int incluir(ProjetoBean projeto) throws SQLException, NoSuchAlgorithmException {
		if (projeto == null) return 0;
		PreparedStatement stmt = con.prepareStatement("INSERT INTO projeto (nome_projeto, descricao_projeto/*, id_pessoa*/) values (?, ?/*, ?*/)");
		stmt.setString(1, projeto.getNome());
		stmt.setString(2, projeto.getDescricao());
	//	stmt.setLong(3, projeto.getPessoa().getId());		
		int retorno = stmt.executeUpdate();
		stmt.close();
		return retorno;
	}

	public ProjetoBean consultar(Long id) throws SQLException, NoSuchAlgorithmException {
		PreparedStatement stmt = this.con.prepareStatement("SELECT * FROM projeto WHERE id_projeto=?");
		stmt.setLong(1, id);
		ResultSet rs = stmt.executeQuery();
		ProjetoBean projeto = null;
		if (rs.next()) {
			projeto = new ProjetoBean();
			projeto.setId(rs.getLong("id_projeto"));
			projeto.setNome(rs.getString("nome_projeto"));
			projeto.setDescricao(rs.getString("descricao_projeto"));
		    projeto.setPessoa(new PessoaDAO().consultar(rs.getLong("id_pessoa")));			
		}
		rs.close();
		stmt.close();
		return projeto;	
	}

	public List<ProjetoBean> listar() throws SQLException, NoSuchAlgorithmException {
		PreparedStatement stmt = this.con.prepareStatement("SELECT * FROM projeto");
		ResultSet rs = stmt.executeQuery();
	    List<ProjetoBean> projetos = new ArrayList<ProjetoBean>();
	    while (rs.next()) {
		    ProjetoBean projeto = new ProjetoBean();
		    projeto.setId(rs.getLong("id_projeto"));
		    projeto.setNome(rs.getString("nome_projeto"));
		    projeto.setDescricao(rs.getString("descricao_projeto"));
		    projeto.setPessoa(new PessoaDAO().consultar(rs.getLong("id_pessoa")));
		    projetos.add(projeto);
		}
		rs.close();
		stmt.close();
		return projetos;	
	}

	public int alterar(ProjetoBean projeto) throws SQLException {
		if (projeto == null) return 0;
		PreparedStatement stmt = this.con.prepareStatement("UPDATE projeto SET nome_projeto=?, descricao_projeto=?, id_pessoa=? WHERE id_projeto=?");
		stmt.setString(1, projeto.getNome());
		stmt.setString(2, projeto.getDescricao());
		stmt.setLong(3, projeto.getPessoa().getId());
		int retorno = stmt.executeUpdate();
		stmt.close();
		return retorno;
	}	

	public int excluir(ProjetoBean projeto) throws SQLException {
		if (projeto == null) return 0;
		PreparedStatement stmt = this.con.prepareStatement("DELETE FROM projeto WHERE id_projeto=?");
		stmt.setLong(1, projeto.getId());
		int retorno = stmt.executeUpdate();
		stmt.close();
		return retorno;
	}
}